package com.itheima.train.manager.order.handler.controller;

import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashMap;

@Component
@ServerEndpoint(value = "/im/{userId}")
public class WebSocketServer {

    // 创建一个HashMap集合，通过该集合来存储session信息
    private static HashMap<String , Session> sessionHashMap = new HashMap<>() ;

    // 创建一个变量，用来记录userId
    private String userId = null ;

    /**
     * 当前客户端和服务器建立连接了以后，在这里会执行该方法
     * @param session
     * @param userId
     */
    @OnOpen
    public void onOpen(Session session , @PathParam(value = "userId") String userId) {

        // 把userId赋值给成员的userId
        this.userId = userId ;

        // 就是把我们的session信息存储起来，后期我们在进行消息推送的时候，其实就是通过session对象中的方法完成消息的推送
        if(sessionHashMap.containsKey(userId)) {
            sessionHashMap.remove(userId) ;
        }

        // 进行保存
        sessionHashMap.put(userId , session) ;

    }

    @OnClose
    public void onClose() {
        if(sessionHashMap.containsKey(userId)) {
            sessionHashMap.remove(userId) ;
        }
    }

    // 消息的推送
    public void sendMessageToUser(String userId , String message) {
        try {
            Session session = sessionHashMap.get(userId);
            session.getBasicRemote().sendText(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
